0%

(NIPS 2015) Faster R-CNN:Towards real-time object detection with region proposal networks

Keyword [Faster R-CNN] [RoI Align]

Ren S, He K, Girshick R, et al. Faster R-CNN: Towards real-time object detection with region proposal networks[C]//Advances in neural information processing systems. 2015: 91-99.


1. Overview


SPPnet和Fast R-CNN通过共享特征图的机制解决了proposal计算冗余的问题,因此网络的瓶颈在于region proposal计算。由于

  • 神经网络通过GPU运算
  • Region proposal通过CPU运算,Selective Search 2s/image

两者在时间上差别太大,在GPU上重新实现region proposal算法虽然能解决问题,但是并没有利用到计算共享的思想。

因此,论文提出Region Proposal Network (RPN). RPN是全卷积网络,模拟预测每个position的object bound和score, nearly cost free (10ms/image).

1.1. 模型结构

  • 论文将RPN与Fast R-CNN合并,称为Faster R-CNN. RPN与Fast R-CNN共享输入图像的卷积特征图conv_map.
    • RPN对conv_map进行计算输出RoIs,类似于attention机制
    • Fast R-CNN基于RoIs进行计算输出对象框、对象置信度


  • 论文使用的VGG16网络,5fps on GPU. Faster R-CNN在VOC 2007/2012和MS COCO数据集达到state of the art。

1.2. 多尺寸机制




2. Faster R-CNN


论文中的Faster R-CNN使用了两种网络

  • ZF net RPN与Faster R-CNN共享5层网络
  • VGG16 RPN与Faster R-CNN共享13层网络

3. RPN


3.1. RPN结构

RPN网络有3个Conv层组成

  • 第一层Conv. 256 kernels for ZF net, 512 kernels for VGG16, n*n size (论文使用n=3)
  • 第二层Conv(cls). 2k_anchors kernels, 11 size
  • 第三层Conv(reg). 4k_anchors kernels,11 size


3.2. Anchors

共享特征图上的每个点模拟生成k个anchors box. 对于一张hw的RPN特征图,共有hw*k个anchor box.上述方法为多尺寸anchors, 因此模型中只使用单尺寸输入图片和单尺寸卷积核。

3.3. 测试阶段

  • 输入一张图片,图片经过共享卷积层生成共享特征图
  • 共享特征图经过RPN网络生成whk个anchor box (reg)和对应的whk个前景/背景分类概率 (cls)
  • 选出topN个前景概率最大anchor box,并使用nms算法对anchor box进行过滤,得到最终输入到Fast R-CNN网络中的RoI (proposal或anchor box)

3.4. 训练阶段

与测试阶段的区别在于

  • 通过nms生成RoI的数量不同(例如github代码中测试阶段保留300 RoI,训练阶段保留2000 RoI)
  • 计算loss(分类交叉熵和预测框的误差)


3.5. Loss Function

基于gt_box定义anchor box为正例还是负例

  • 与gt_box IoU最高的anchor box为正例
  • 与gt_box IoU大于0.7的anchor box为正例
  • 与gt_box IoU小于0.3的anchor box为负例

计算公式



  • i表示第i个anchor box
  • 表示ground truth, 正例p_{}为1,负例p_{*}为0
  • L_{cls}为log loss
  • L_{reg}为L1 loss
  • λ默认为10


  • x表示预测
  • x_{a}表示anchor
  • x^{*}表示ground truth

3.6. 训练细节

  • 随机抽取一张图片中的256个anchor计算一个minibatch中的loss. 在这256个anchor中,正负例数量为1:1。如果一张图片中正例少于128个,使用负例填充
  • 模型使用ImageNet预训练权重

3.7. 迭代训练

每次迭代分为四个步骤

  • 预训练权重初始化模型,训练RPN
  • 使用RPN产生RoI,训练检测网络Fast R-CNN
  • 使用检测网络权重初始化RPN,固定共享层,微调RPN
  • 固定共享层,微调检测网络剩余部分

3.8. 实现细节

  • 使用单尺寸图片,将最短边resize到s=600.
  • anchor scale采用128128, 256256, 512*512
  • aspect ratios采用1:1, 1:2, 2:1


  • 对于1000600的图片,共大约20000(6040*9)个anchor。剔除超过边界的anchor后,剩余大约6000 anchor for training。选出前景概率topN的anchor,并使用0.7阈值的NMS算法过滤,2000个用于训练的RoI。

4. 实验


4.1. VOC数据集



4.2. 耗时



4.3. Anchor超参数



4.4. λ超参数




5. 代码流程图


RoI是相对于输入图像而言的,因此在将RoI和共享特征图输入到RoI Pooling层的同时,还会输入一个scale参数,也称为feature_stride(表示共享特征图与输入图像的比例)。